package LocalCRM::Doc::Act;

use base 'LocalCRM::Doc';
use Class::Date;
use PDF::Table;
use strict;

sub new
{
    my $self= shift->SUPER::new();
    my %arg = @_;
    my ($x,$y);
    my @r;

    $self->{data}->{content}=
    [
	[
	    $self->utf2win('№'),
	    $self->utf2win('Наименование'),
	    $self->utf2win('Ед.Изм.'),
	    $self->utf2win("Кол-\nво"),
	    $self->utf2win('Цена'),
	    $self->utf2win('Сумма'),
	],
    ];

    $self->{_table} = new PDF::Table;

    $self->{page} = $self->{pdf}->page();
    $self->{page}->mediabox('A4');

    my $text = $self->{page}->text();

    if ( $arg{id} )
    {
	$self->id($arg{id});
    }
    elsif ( $arg{'executive_id'} )
    {
	$self->{invoice} = $self->{_db}->getById('executive',$arg{'executive_id'});
    }
    else
    {
	$text->font($self->{font}->{VerdanaB},16);
	$text->translate(30,550);
	$text->text($self->utf2win('Недостаточно параметров для формирования документа'));
	$text->font($self->{font}->{Verdana},12);
	$text->cr(-30);
	$text->text($self->utf2win('В ходе формирования документа произошла ошибка!'));
	$text->cr(-15);
	$text->text($self->utf2win('В метод формирования не были переданы обязательные параметры'));
	$text->cr(-15);
	$text->text($self->utf2win('Номер документа для формирования или ID исполнителя услуги.'));
	return $self;
    }

    $text->font($self->{font}->{VerdanaB},12);
    $self->{_table}->text_block
    (
	$text,
	$self->utf2win(sprintf 'Акт №%d от %s г.', $self->{invoice}->{id}, $self->{invoice}->{date}->strftime('%d.%m.%Y')),
	x	=> 20,
	y	=> 800,
	w	=> 540,
	h	=> 20,
	align	=> 'center',
    );

    $text->font($self->{font}->{Verdana},10);
    $self->{_table}->text_block
    (
	$text,
	$self->utf2win(sprintf "выполнение работ\nк договору оказания услуг связи № %s", $self->{invoice}->{contract_number}),
	x	=> 20,
	y	=> 785,
	w	=> 540,
	h	=> 20,
	align	=> 'center',
    );

    $text->translate(40,740);
    $text->text($self->utf2win($self->{invoice}->{act_city}));

    my $d = Class::Date->new($self->{invoice}->{date});

    $text->distance(430,0);
    $text->text($self->utf2win(sprintf '%d.%02d.%04d г.', $d->day(),$d->mon(), $d->year()));
    @r = $text->textpos();

    @r = $self->{_table}->text_block
    (
	$text,
	$self->utf2win(sprintf $self->{invoice}->{act_text1}, $self->{invoice}->{customer_name}),
	x	=> 20,
	y	=> $r[1]-30,
	w	=> 500,
	h	=> 500,
    );

    @r = $self->{_table}->table
    (
	$self->{pdf},
	$self->{page},
	$self->{data}->{content},
	x	=> 20,
	w	=> 500,
	start_y	=> $r[1]-20,
	start_h	=> 200,
	font	=> $self->{font}->{Verdana},
	font_size	=> 10,
	padding	=> 3,
	column_props	=>
	[
	    undef,
	    {min_w=>250}
	]
    );

# Дорисовываем ячейки внизу таблицы
    my $gfx = $self->{page}->gfx();

    $gfx->move($r[3][5],$r[2]-15);
    $gfx->hline($r[3][6]);
    $gfx->move($r[3][5],$r[2]);
    $gfx->vline($r[2]-45);
    $gfx->move($r[3][6],$r[2]);
    $gfx->vline($r[2]-45);

    $gfx->move($r[3][5],$r[2]-30);
    $gfx->hline($r[3][6]);
    $gfx->move($r[3][5],$r[2]-45);
    $gfx->hline($r[3][6]);
    $gfx->stroke();

# Делаем описание к этим ячейкам
    $text->font($self->{font}->{VerdanaB},9);

    my $super_total;

# Итого
    $text->translate($r[3][5]-40,$r[2]-12);
    $text->text($self->utf2win('Итого:'));

# Итого НДС
    if ( $self->{invoice}->{nds} )
    {
	$super_total = $self->amount($self->{data}->{sum}->{total}+$self->{data}->{sum}->{nds});

	$text->translate($r[3][5]-65,$r[2]-27);
	$text->text($self->utf2win('Итого НДС:'));
    }
    else
    {
	$super_total = $self->amount($self->{data}->{sum}->{total});

	$text->translate($r[3][5]-102,$r[2]-27);
	$text->text($self->utf2win('Без налога (НДС):'));
    }

# Итого к оплате
    $text->translate($r[3][5]-88,$r[2]-42);
    $text->text($self->utf2win('Итого к оплате:'));

    $text->font($self->{font}->{Verdana},9);

# Значение: ИТОГО
    $text->translate($r[3][5]+5,$r[2]-12);
    $text->text($self->{data}->{sum}->{total});

# Значение: НДС
    $text->translate($r[3][5]+5,$r[2]-27);

    if ( $self->{invoice}->{nds} )
    {
	$text->text($self->{data}->{sum}->{nds});
    }
    else
    {
	$text->text('-');
    }

# Значение: Итого + НДС
    $text->translate($r[3][5]+5,$r[2]-42);
    $text->text($super_total);

    @r = $self->{_table}->text_block
    (
	$text,
	$self->utf2win($self->{invoice}->{act_text2}),
	x	=> 20,
	y	=> $r[2]-70,
	w	=> 500,
	h	=> 500,
    );

    $text->translate(100,$r[1]-60);
    $text->text($self->utf2win('От Оператора'));

    $text->distance(300,0);
    $text->text($self->utf2win('От Абонента'));

    $text->translate(60,$r[1]-140);
    $text->text($self->utf2win(sprintf '/                    / %s /', $self->{invoice}->{act_boss}),-underline=>'auto');

    $text->distance(300,0);
    $text->text($self->utf2win('/                    /                    /'),-underline=>'auto');

    return $self;
}

sub id
{
    my $self = shift->SUPER::id($_[0]);
    my $total;
    my $i;

    foreach my $row ( @{$self->{data}->{db}} )
    {
	$i++;

	push @{$self->{data}->{content}},
	[
	    $i,
	    $self->utf2win($row->{service_name}),
	    $self->utf2win($row->{unit}),
	    $row->{quantity},
	    $row->{price},
	    $self->amount($row->{price}*$row->{quantity}),
	];

	$total += $row->{price} * $row->{quantity};
    }

    $self->{data}->{count} = $i;
    $self->{data}->{sum}->{rub} = int($total);
    $self->{data}->{sum}->{kop} = $total*100%100;
    $self->{data}->{sum}->{total} = $self->amount($total);
    $self->{data}->{sum}->{nds} = $self->nds($total)->{value};

    return $self;
}

1;
